/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.chframework.common.thread.threadpool;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.task.TaskDecorator;
import org.springframework.lang.NonNull;

@Slf4j
public class SpringTaskDecorator implements TaskDecorator {

    /**
     * No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.
     * This is an invalid application configuration.
     * 这是比较常见的Shiro报错，一般出现在获取当前用户信息（即：SecurityUtils.getSubject()）的时候，没有找到SecurityManager。
     *
     * https://blog.csdn.net/qq_16828223/article/details/141188176
     */
    @NonNull
    @Override
    public Runnable decorate(@NonNull Runnable runnable) {
        return () -> {
            try {
                log.debug("线程池任务装饰器 - begin");
                // 在执行线程池任务之前，可以执行一些传参逻辑
                // SecurityUtils.getSubject().associateWith(runnable);
                runnable.run();
            } finally {
                // 在执行线程池任务之后，需要执行一些清理线程工作内存数据的逻辑
                log.debug("线程池任务装饰器 - end");
            }
        };
    }

}
